package com.qen.repository;

import com.qen.wrapper.Wrapper;
import com.qen.wrapper.Wrappers;
import com.qen.wrapper.update.LambdaUpdateWrapper;
import com.qen.wrapper.update.UpdateWrapper;

import java.util.Map;

/**
 * @author licz
 * @data 2025年05月20日 10:51 AM
 */
public interface LambdaHandDao<T> {

    /**
     * 根据 columnMap 条件，删除记录
     *
     * @param columnMap 表字段 map 对象
     */
    default int deleteByMap(Map<String, Object> columnMap) {
        return this.delete(Wrappers.<T>query().allEq(columnMap));
    }

    /**
     * 根据 entity 条件，删除记录
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null,里面的 entity 用于生成 where 语句）
     */
    int delete(Wrapper<T> queryWrapper);

    /**
     * 根据 Wrapper 更新记录
     * <p>此方法无法进行自动填充,如需自动填充请使用{@link #update(T, Wrapper)} </p>
     *
     * @param updateWrapper {@link UpdateWrapper} or {@link LambdaUpdateWrapper}
     */
    default int update(Wrapper<T> updateWrapper) {
        return update(null, updateWrapper);
    }

    /**
     * 根据 Wrapper 更新记录
     *
     * @param entity  要修改的值
     * @param wrapper 条件
     * @return
     */
    int update(T entity, Wrapper<T> wrapper);

}
